package p4;

class Singleton{
    //1.实例化一个静态类对象
    private static Singleton instance = new Singleton();

    //2, 提供一个静态方法获取该类对象
    public static Singleton getInstance(){
        return instance;
    }

    //3. 将该类的构造方法设为私有
    private Singleton(){};
}

class LazySingleton{
    //1.实例化一个静态类对象
    private static LazySingleton instance = null;

    //2, 提供一个静态方法获取该类对象
    public static LazySingleton getInstance(){
        //判断是否已经进行初始化, 未初始化进行加锁初始化,已初始化直接返回
       if(instance == null){
           synchronized (LazySingleton.class){
               //多个线程要进行初始化时, 会产生锁竞争, 这个if判断, 是否真要进行初始化
               if(instance == null){
                   instance = new LazySingleton();
               }
           }
       }
       return instance;
    }

    private LazySingleton(){};
}

public class Test01 {
    public static void main(String[] args) {
        //测试饿汉模式
       Singleton instance = Singleton.getInstance();
    }
}
